package com.leigq.basaltools.enumeration;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 全局枚举
 *
 * @author leigq
 */
public abstract class GlobalEnums {

    /**
     * 状态
     */
    @AllArgsConstructor
    @Getter
    public enum Status {

        /**
         * 禁用
         */
        DISABLE(0, "禁用"),

        /**
         * 启用
         */
        ENABLE(1, "启用"),

		;

        private final Integer code;
		private final String msg;

    }


    /**
     * 环境枚举
     */
    @AllArgsConstructor
    @Getter
    public enum Profile {
        /**
         * Dev profile.
         */
        DEV("dev"),

        /**
         * Test profile.
         */
        TEST("test"),

        /**
         * Prod profile.
         */
        PROD("prod"),

		;

        private final String profile;

        @Override
        public String toString() {
            return profile;
        }
    }


    /**
     * 用户设备平台
     */
    @AllArgsConstructor
    @Getter
    public enum DevicePlatform {

        /**
         * 网页端
         */
        WEB("Web"),

        /**
         * ANDROID 端
         */
        ANDROID("Android"),

        /**
         * IOS 端
         */
        IOS("IOS"),


        ;

        private final String platform;

        @Override
        public String toString() {
            return platform;
        }
    }


    /**
     * 请求头类型
     */
    @AllArgsConstructor
    @Getter
    public enum RequestHeader {

        /**
         * TOKEN
         */
        TOKEN("token"),

        /**
         * LANGUAGE
         */
        LANGUAGE("language"),

        /**
         * USER_AGENT
         */
        USER_AGENT("user-agent"),


        /**
         * Authorization
         */
        AUTHORIZATION("Authorization"),

        ;

        private final String header;


        @Override
        public String toString() {
            return header;
        }
    }

    /**
     * 各种正则表达式
     * 这里使用的枚举来保存,目的是为了整个项目统一使用(强制)这里正则表达式,这样可以达到表达式的复用和统一
     */
    @AllArgsConstructor
    @Getter
    public enum Regex {

        /**
         * 验证手机
         */
        PHONE("^1(3|4|5|7|8)\\d{9}$"),

        /**
         * 验证邮箱
         */
        EMAIL("^\\w[-\\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\\.)+[A-Za-z]{2,14}$"),

        /**
         * 判断字符串是否为纯数字
         */
        ALL_NUMBER("^[0-9]*$"),

        /**
         * 6-20个字母、数字、下划线或减号，以字母开头（适用于用户名、密码）
         */
        SIX_TO_TWENTY("^[a-zA-Z][a-zA-Z0-9_-]{5,19}$"),

        /**
         * 身份证号码(15位),很少会使用到
         */
        FIFTEEN_IDCARD("^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$"),

        /**
         * 身份证号码(18位)
         */
        EIGHTEEN_IDCARD("^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$"),

        /**
         * 2-4位中文汉字(真实姓名)
         */
        TWO2FOUR_CHINESE("^[\\u4e00-\\u9fa5]{2,4}$"),


        /**
         * 校验日期格式为yyyy-MM-dd HH:mm:ss的正则表达式
         */
        DATE_TIME_FORMAT("^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[13579][26])00))-02-29))\\\\s+([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$"),

        /**
         * 校验日期格式为yyyy-MM-dd的正则表达式
         */
        DATE_FORMAT("^(\\d{4})-(0\\d{1}|1[0-2])-(0\\d{1}|[12]\\d{1}|3[01])$"),

        ;

        private final String regex;

        @Override
        public String toString() {
            return regex;
        }
    }

}
